home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / st80_pr4.lha / st80_pre4 / Foible / SDS / SDS-Tables.st < prev    next >
Text File  |  1993-07-24  |  7KB  |  256 lines

  1. Model subclass: #Table
  2.     instanceVariableNames: 'orderedValues startIndex stopIndex delta indexWholeDigit indexFractionDigit valueWholeDigit valueFractionDigit indexTitle valueTitle tableOC currentSelection '
  3.     classVariableNames: ''
  4.     poolDictionaries: ''
  5.     category: 'SDS-Tables'!
  6. Table comment:
  7. 'This is a model for TableView. This class is used to create a table or
  8. ordered values.
  9.     Instance Variables:
  10.         orderedValues <OrderedCollection>
  11.             the list of values to be presented in the table
  12.         startIndex <Float>
  13.             starting index for the table
  14.         stopIndex <Float>
  15.             the last index for the table
  16.         delta <Float>
  17.             index increment
  18.         indexWholeDigit <Number>
  19.             the number of whole digits in index column
  20.         indexFractionDigit <Number>
  21.             the number of fraction digits in index column
  22.         valueWholeDigit <Number>
  23.             the number of whole digits in value column
  24.         valueFractionDigit <Number>
  25.             the number of fraction digits in value column
  26.         indexTitle <Symbol>
  27.             the title for the index
  28.         valueTitle <Symbol>
  29.             the title for values
  30.         tableOC <OrderedCollection>
  31.             the table is presented in SelectionInListView
  32.         currentSelection <Symbol>
  33.             used for current selection in SelectionInListView '!
  34.  
  35.  
  36. !Table methodsFor: 'private'!
  37.  
  38. findFractionDigitLength: aFloat 
  39.     | aStream |
  40.     aStream _ TextStream on: ''.
  41.     aFloat abs fractionPart printOn: aStream.
  42.     ^aStream contents asString size - 2!
  43.  
  44. findWholeDigitLength: aFloat 
  45.     | aStream |
  46.     aStream _ TextStream on: ''.
  47.     aFloat truncated printOn: aStream.
  48.     ^aStream contents asString size!
  49.  
  50. printFloat: aFloat withWholeDigitLength: aWholeDigitLength fractionDigitLength: aFractionDigitLength 
  51.     | aStream aByteString counter size  tempString wholeLength fractionLength|
  52.     (wholeLength _ self findWholeDigitLength: aFloat)
  53.         > aWholeDigitLength
  54.         ifTrue: 
  55.             [aStream _ TextStream on: ''.
  56.             aFloat printOn: aStream.
  57.             ^aStream contents asString].
  58.     size _ aWholeDigitLength + aFractionDigitLength + 1.
  59.     aByteString _ ByteString new: size.
  60.     counter _ 1.
  61.     [counter <=aWholeDigitLength] whileTrue: [aByteString at: counter put: Character space. counter _ counter + 1].
  62.     [counter <=  size] whileTrue: [aByteString at: counter put: $0.counter _ counter + 1].
  63.     aByteString at: aWholeDigitLength + 1 put: $. .
  64.     aStream _ TextStream on: ''.
  65.     aFloat truncated printOn: aStream.
  66.     tempString _ aStream contents asString.
  67.     aByteString replaceFrom: (aWholeDigitLength + 1 - wholeLength) to: (aWholeDigitLength) with: tempString startingAt: 1.
  68.     aStream _ TextStream on: ''.
  69.     (fractionLength _ self findFractionDigitLength: aFloat) >aFractionDigitLength ifTrue: [fractionLength _ aFractionDigitLength] .
  70.     aFloat abs fractionPart printOn: aStream.
  71.     tempString _ aStream contents asString.
  72.     aByteString replaceFrom: (aWholeDigitLength + 2) to: (aWholeDigitLength + 1 + fractionLength) with: tempString startingAt: 3.
  73.     ^aByteString.!
  74.  
  75. printTitle: aSymbol withStringLength: aNumber 
  76.     | aByteString counter |
  77.     aByteString _ ByteString new: aNumber.
  78.     counter _ 1.
  79.     [counter <= aNumber]
  80.         whileTrue: 
  81.             [aByteString at: counter put: Character space.
  82.             counter _ counter + 1].
  83.     aSymbol size >= aNumber ifTrue: [^aSymbol asString].
  84.     aByteString
  85.         replaceFrom: aNumber - aSymbol size // 2 + 1
  86.         to: aNumber - aSymbol size // 2 + aSymbol size 
  87.         with: aSymbol asString
  88.         startingAt: 1.
  89.     ^aByteString!
  90.  
  91. setIndexLengths
  92.     | temp |
  93.     indexFractionDigit _ self findFractionDigitLength: delta.
  94.     (temp _ self findWholeDigitLength: startIndex) > (indexWholeDigit _ self findWholeDigitLength: stopIndex) ifTrue: [indexWholeDigit _ temp]!
  95.  
  96. setValueLengths
  97.     | temp |
  98.     valueFractionDigit _ 0.
  99.     valueWholeDigit _ 1.
  100.     orderedValues do: 
  101.         [:value | 
  102.         (temp _ self findFractionDigitLength: value asFloat) > valueFractionDigit ifTrue: [valueFractionDigit _ temp].
  103.         (temp _ self findWholeDigitLength: value asFloat) > valueWholeDigit ifTrue: [valueWholeDigit _ temp]].
  104.         valueFractionDigit > 3 ifTrue: [valueFractionDigit _ 3]! !
  105.  
  106. !Table methodsFor: 'creating'!
  107.  
  108. buildTable
  109.     | aString tempIndex counter |
  110.     self setIndexLengths.
  111.     self setValueLengths.
  112.     aString _ (self printTitle: indexTitle withStringLength: indexFractionDigit + indexWholeDigit + 1)
  113.                 , '        ' , (self printTitle: valueTitle withStringLength: valueWholeDigit + valueFractionDigit + 1).
  114.     tableOC _ OrderedCollection new.
  115.     tableOC add: aString asSymbol.
  116.     tempIndex _ startIndex.
  117.     counter _ 1.
  118.     [tempIndex <= stopIndex]
  119.         whileTrue: 
  120.             [aString _ self
  121.                         printFloat: tempIndex
  122.                         withWholeDigitLength: indexWholeDigit
  123.                         fractionDigitLength: indexFractionDigit.
  124.             aString _ aString , '        ' , (self
  125.                             printFloat: ((orderedValues at: counter) asFloat)
  126.                             withWholeDigitLength: valueWholeDigit
  127.                             fractionDigitLength: valueFractionDigit).
  128.             tableOC add: aString asSymbol.
  129.             counter _ counter + 1.
  130.             tempIndex _ tempIndex + delta]! !
  131.  
  132. !Table methodsFor: 'accessing'!
  133.  
  134. currentSelection
  135.     ^currentSelection!
  136.  
  137. currentSelection: aSymbol
  138.     ^currentSelection _ aSymbol!
  139.  
  140. delta    
  141.     ^delta!
  142.  
  143. delta: aNumber    
  144.     ^delta _ aNumber!
  145.  
  146. indexTitle
  147.     ^indexTitle!
  148.  
  149. indexTitle: aSymbol
  150.     ^indexTitle _ aSymbol!
  151.  
  152. menu
  153.     ^nil!
  154.  
  155. orderedValues
  156.     ^orderedValues!
  157.  
  158. orderedValues: anOrderedCollection
  159.     ^orderedValues _ anOrderedCollection!
  160.  
  161. startIndex
  162.     ^startIndex!
  163.  
  164. startIndex: aNumber    
  165.     ^startIndex _ aNumber!
  166.  
  167. stopIndex
  168.     ^stopIndex!
  169.  
  170. stopIndex: aNumber    
  171.     ^stopIndex _ aNumber!
  172.  
  173. tableOC
  174.     ^tableOC!
  175.  
  176. tableOC: anOrderedCollection
  177.     ^tableOC_ anOrderedCollection!
  178.  
  179. valueTitle
  180.     ^valueTitle!
  181.  
  182. valueTitle: aSymbol
  183.     ^valueTitle _ aSymbol! !
  184. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  185.  
  186. Table class
  187.     instanceVariableNames: ''!
  188.  
  189.  
  190. !Table class methodsFor: 'instance creation'!
  191.  
  192. withStartIndex: aStartIndex stopIndex: aStopIndex delta: aDelta  orderedValues:  anOrderedValues indexTitle: anIndexTitle valueTitle: aValueTitle
  193.     |aTable| 
  194.     aTable _ Table new.
  195.     aTable startIndex: aStartIndex asFloat.
  196.     aTable stopIndex: aStopIndex asFloat.
  197.     aTable delta: aDelta asFloat.
  198.     aTable orderedValues: anOrderedValues.
  199.     aTable indexTitle: anIndexTitle.
  200.     aTable valueTitle: aValueTitle.
  201.     ^aTable.! !
  202.  
  203. View subclass: #TableView
  204.     instanceVariableNames: ''
  205.     classVariableNames: ''
  206.     poolDictionaries: ''
  207.     category: 'SDS-Tables'!
  208. TableView comment:
  209. 'I am the view for table. It creates a SelectionInListView for the table.
  210. See example in the class method to build the table.'!
  211.  
  212. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  213.  
  214. TableView class
  215.     instanceVariableNames: ''!
  216.  
  217.  
  218. !TableView class methodsFor: 'instance creation'!
  219.  
  220. openOn: aTable
  221.     
  222.     |topView aSelectionInListView|
  223.  
  224.     topView _ StandardSystemView model: aTable
  225.                 label: ('Table for: ', aTable valueTitle asString)
  226.                 minimumSize: 120@300.
  227.     topView borderWidth: 1.
  228.     aSelectionInListView _ SelectionInListView
  229.                 on: aTable
  230.                 printItems: true
  231.                 oneItem: false
  232.                 aspect: #currentSelection
  233.                 change: #currentSelection:
  234.                 list: #tableOC
  235.                 menu: #menu
  236.                 initialSelection: #currentSelection.
  237.     topView addSubView: aSelectionInListView in: (0@0 extent:1@1) borderWidth:1.
  238.     topView controller open! !
  239.  
  240. !TableView class methodsFor: 'examples'!
  241.  
  242. example
  243.     "TableView example"
  244.  
  245.     | anOC aTable |
  246.     anOC _ OrderedCollection new.
  247.     anOC add: 1.0; add: 23.4; add: 234.454.
  248.     aTable _ Table
  249.                 withStartIndex: 0
  250.                 stopIndex: 10
  251.                 delta: 5
  252.                 orderedValues: anOC
  253.                 indexTitle: #time
  254.                 valueTitle: #graph.
  255.     aTable buildTable.
  256.     TableView openOn: aTable! !